//
// Created by lanlu on 2025/8/5.
//

#include <queue>
#include <iostream>
using namespace std;

class Solution {
public:
    int peopleAwareOfSecret(int n, int delay, int forget) {
        int MOD = 1e9 + 7;
        // 存储每个人知道秘密的起始天数
        // {1,0,3,4,5,6,6}
        queue<int> q;
        q.push(1);

        for (int day = 2; day <= n; day++)
        {
            // 移除已经忘记秘密的人
            while (!q.empty() && q.front() <= day - forget)
            {
                q.pop();
            }
            // 计算可以分享秘密的人
            // 使用临时队列进行遍历 不修改原队列的值
            int share = 0;
            queue<int> temp = q;
            while (!temp.empty())
            {
                // 判断这一天知道秘密的人 是否可以在第day天分享
                // temp.front() <= day - delay
                if (temp.front() + delay <= day)
                {
                    share++;
                }
                temp.pop();
            }

            // 新增的人 添加到队列
            for (int i = 0; i < share; i++)
            {
                q.push(day);
            }
        }

        return q.size() % MOD;
    }
};

int main()
{
    Solution s;
    int n = 6;
    int delay = 2;
    int forget = 4;
    int res = s.peopleAwareOfSecret(n, delay, forget);
    cout << res << endl;
    return 0;
}